package work.comeback.omo.util.common;

import jakarta.servlet.http.HttpSession;
import work.comeback.omo.model.user.UserBean;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class AuthUtils extends SessionUtils {

    /**
     * 使用 SHA-256 算法加密原始密码。
     *
     * @param rawPassword 待加密的原始密码。
     * @return 经过 SHA-256 加密后的密码字符串。
     * @throws RuntimeException 如果加密过程中出现错误。
     */
    public static String encryptPassword(String rawPassword) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(rawPassword.getBytes());
            byte[] bytes = md.digest();
            StringBuilder sb = new StringBuilder();
            for (byte b : bytes) {
                sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("Error while encrypting password", e);
        }
    }

    /**
     * 检查验证码是否错误
     *
     * @param session HttpSession 对象
     * @return 如果验证码错误，返回true，否则返回false
     */
    public static boolean isCaptchaError(HttpSession session) {
        return hasAttr("checkCodeMsg", "error", session);
    }

    /**
     * 移除验证码错误消息
     *
     * @param session HttpSession 对象
     */
    public static void removeCaptchaErrorMsg(HttpSession session) {
        session.removeAttribute("checkCodeMsg");
    }

    /**
     * 设置用户登录状态到会话
     *
     * @param session HttpSession 对象
     * @param user    用户实体对象
     */
    public static void setUserSession(HttpSession session, UserBean user) {
        if (user.getRole().equals("admin")) {
            session.setAttribute("isAdmin", true);
        }
        session.setAttribute("username", user.getUsername());
        session.setAttribute("isLogin", true);
        session.setAttribute("userAvatarUrl", user.getAvatarUrl());
    }
}